package edu.wit.common.helper;

import com.alibaba.fastjson.JSONObject;
import edu.wit.common.utils.http.HttpUtil;
import edu.wit.common.utils.MD5;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class HttpRequestHelper {

        public static void main(String[] args) {
            Map<String, Object> paramMap = new HashMap<>();
            paramMap.put("d", "4");
            paramMap.put("b", "2");
            paramMap.put("c", "3");
            paramMap.put("a", "1");
            paramMap.put("timestamp", getTimestamp());
            //log.info(getSign(paramMap, "111111111"));
        }

        /**
         *
         * @param paramMap
         * @return
         */
        public static Map<String, Object> switchMap(Map<String, String[]> paramMap) {
            Map<String, Object> resultMap = new HashMap<>();
            for (Map.Entry<String, String[]> param : paramMap.entrySet()) {
                resultMap.put(param.getKey(), param.getValue()[0]);
            }
            return resultMap;
        }

        /**
         * 请求数据获取签名
         * @param paramMap
         * @param signKey
         * @return
         */
        public static String getSign(Map<String, Object> paramMap, String signKey) {
            if(paramMap.containsKey("sign")) {
                paramMap.remove("sign");
            }
            TreeMap<String, Object> sorted = new TreeMap<>(paramMap);
            StringBuilder str = new StringBuilder();
            for (Map.Entry<String, Object> param : sorted.entrySet()) {
                str.append(param.getValue()).append("|");
            }
            str.append(signKey);
            //log.info("加密前：" + str.toString());
            String md5Str = MD5.encrypt(str.toString());
            //log.info("加密后：" + md5Str);
            return md5Str;
        }

        /**
         * 签名校验
         * @param paramMap
         * @param signKey
         * @return
         */
        public static boolean isSignEquals(Map<String, Object> paramMap, String signKey) {
            String sign = (String)paramMap.get("sign");
            String md5Str = getSign(paramMap, signKey);
            if(!sign.equals(md5Str)) {
                return false;
            }
            return true;
        }

        /**
         * 获取时间戳
         * @return
         */
        public static long getTimestamp() {
            return new Date().getTime();
        }

        /**
         * 封装同步请求
         * @param paramMap
         * @param url
         * @return
         */
        public static JSONObject sendRequest(Map<String, Object> paramMap, String url){
            String result = "";
            try {
                //封装post参数
                StringBuilder postdata = new StringBuilder();
                for (Map.Entry<String, Object> param : paramMap.entrySet()) {
                    postdata.append(param.getKey()).append("=")
                            .append(param.getValue()).append("&");
                }
                //log.info(String.format("--> 发送请求：post data %1s", postdata));
                byte[] reqData = postdata.toString().getBytes("utf-8");
                byte[] respdata = HttpUtil.doPost(url,reqData);
                result = new String(respdata);
                //log.info(String.format("--> 应答结果：result data %1s", result));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return JSONObject.parseObject(result);
        }
}
